package de.hdu.tennis.ctrl;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.mail.internet.AddressException;

import org.apache.log4j.Logger;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import de.hdu.tennis.dao.MitgliedDao;
import de.hdu.tennis.model.Mitglied;

/**
 * Mitgliedcontroller
 * @author Lilli Kardapolzew, Katharina Weber, Carolina Hirtreiter
 *
 */

@Controller
public class MitgliedController {
	
	private static Logger log = Logger.getLogger(MitgliedController.class);
	private MitgliedDao mitgliedDao = null; 

	
	
    public void setMitgliedDao(MitgliedDao mitgliedDao) {
		this.mitgliedDao = mitgliedDao;
	}
    
	/**
     * <p>Edits Mitglied </p>
     * <p>Expected HTTP GET and request '/EditMitglied.hmtl'.<br>
     * Linked Viewname to 'edit-mitglied.jsp'<br>
     * @param id ID of Mitglied - optional, if null then new Mitglied</p>
     * @return ModelAndView edit-mitglied
     */
    @RequestMapping(value="/EditMitglied.html", method=RequestMethod.GET)
    public ModelAndView edit(@RequestParam(required=false) Integer id) {
    	log.debug("EditMitglied.html");
    	ModelAndView mv = new ModelAndView();
    	if (id == null) {
    		mv.addObject(new Mitglied());
    	} else { 
    		mv.addObject(mitgliedDao.findById(id));
    	}
    	mv.addObject("title", "Mitgliederverwaltung");
    	mv.addObject("message", "Tragen Sie den Mitglied ein");
    	//mv.addObject("mitglied", mitgliedDao.findAll());
    	mv.setViewName("edit-mitglied");
    	return mv;
    }
    

	/**
     * <p>Add new Mitglied - only for new Mitglied</p>
     * <p>Expected HTTP GET and request '/NeuMitglied.hmtl'.<br>
     * Linked Viewname to 'neu-mitglied.jsp'</p>
     * @return ModelAndView neu-mitglied
     */
    @RequestMapping(value="/NeuMitglied.html", method=RequestMethod.GET)
    public ModelAndView neu(HttpServletRequest request,@RequestParam(required=false) Integer id) {
    	if (request.getSession()!=null || request.getSession().getAttribute("mId")==null) {
			request.getSession().setAttribute("isRegistrierung", true);
		}
    	log.debug("NeuMitglied.html");
    	ModelAndView mv = new ModelAndView();
    	mv.addObject(new Mitglied());
    	mv.addObject("title", "Mitgliederverwaltung");
    	mv.addObject("message", "Tragen Sie den Mitglied ein");
    	
        	mv.setViewName("neu-mitglied");
        	return mv;
    	
    }
    
    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
        binder.registerCustomEditor(Date.class, new CustomDateEditor(
                dateFormat, false));
    }
    
    Date myStringtoDate(String s) throws ParseException{
    	DateFormat df = DateFormat.getInstance();
    	SimpleDateFormat sdf = (SimpleDateFormat)df;
    	sdf.applyPattern("MM/dd/yyyy");
    	return df.parse(s);
    }
    
	/**
     * <p>Save Mitglied - only for existing Mitglied</p>
     * <p>Expected HTTP POST and request '/SaveMitglied.hmtl'.<br>
     * Linked Viewname to 'edit-mitglied.jsp'</p>
     * @return ModelAndView list-mitglied
     */
    @RequestMapping(value="/SaveMitglied.html", method=RequestMethod.POST)
    public ModelAndView save(Mitglied mitglied) throws AddressException, javax.mail.MessagingException {
    	ModelAndView mv = new ModelAndView();
    	  mv.addObject("mitglied", mitgliedDao.findAll());

       if(mitglied.getEmail()  == "" ){
    	   mv.setViewName("edit-mitglied");
     	   return mv;
      }  if  (mitglied.getPasswort() == "") {
       	mv.setViewName("edit-mitglied"); 
       	return mv; 
        }
        else {
       mitgliedDao.save(mitglied);
       mv.setViewName("list-mitglied");
       return mv; 
       }
    }
    
	/**
     * <p>Save new Mitglied - only for new Mitglied</p>
     * <p>Expected HTTP POST and request '/SaveNeuMitglied.hmtl'.<br>
     * Linked Viewname to 'edit-mitglied.jsp'</p>
     * @return ModelAndView welcome
     */
    @RequestMapping(value="/SaveNeuMitglied.html", method=RequestMethod.POST)
    public ModelAndView saveneu(Mitglied mitglied)throws AddressException, javax.mail.MessagingException {
    ModelAndView mv = new ModelAndView();
       mitgliedDao.save(mitglied);
       if(mitglied.getEmail()  == "" ){
    	   mv.setViewName("neu-mitglied");
    	   return mv;
       } 
       if(mitglied.getPasswort() == "") {
    	   mv.setViewName("neu-mitglied"); 
    	   return mv; 
       }
       else {
       mv.setViewName("welcome");
       return mv;}
    }


	/**
     * <p>lists Mitglied - only for Admin</p>
     * <p>Expected HTTP GET and request '/AlleMitglied.hmtl'.<br>
     * Linked Viewname to 'list-mitglied.jsp'</p>
     * @return ModelAndView list-mitglied
     */
    @RequestMapping(value="/AlleMitglied.html", method=RequestMethod.GET)
    public ModelAndView findAll(HttpServletRequest request) {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Vereinsmitglieder");
		mv.addObject("message", "Alle Mitglieder des Vereins");
		mv.addObject("mitglied", mitgliedDao.findAll());
		
		HttpSession session = request.getSession();
		
		if (session.getAttribute("isAdmin").toString().toLowerCase()=="true") 
		{
			mv.addObject("mitglied", mitgliedDao.findAll());
		}
		else
		{
			int mId = Integer.parseInt(session.getAttribute("mId").toString());
			mv.addObject("miglied", mitgliedDao.findById(mId)); 
		}
		
		mv.setViewName("list-mitglied");
		return mv;
    }

}
